import {defineStore} from 'pinia';
import {UserInfosStates} from './interface';
import {Cookie, Session} from '/@/utils/storage';

/**
 * 用户信息
 * @methods setUserInfos 设置用户信息
 */
export const useUserInfo = defineStore('userInfo', {
    state: (): UserInfosStates => ({
        userInfos: {
            id: 0,
            userName: '',
            userNickname: '',
            avatar: '',
            roles: [],
            time: 0,
            authBtnList: [],
        },
        permissions: [],
    }),
    actions: {
        async setUserInfos() {
            // 模拟数据，请求接口时，记得删除多余代码及对应依赖的引入
            const userName = Cookie.get('userName');
            // 模拟数据
            let defaultRoles: Array<string> = [];
            let defaultAuthBtnList: Array<string> = [];
            // admin 页面权限标识，对应路由 meta.roles，用于控制路由的显示/隐藏
            const adminRoles: Array<string> = ['admin'];
            // admin 按钮权限标识
            const adminAuthBtnList: Array<string> = ['btn.add', 'btn.del', 'btn.edit', 'btn.link'];
            // test 页面权限标识，对应路由 meta.roles，用于控制路由的显示/隐藏
            const testRoles: Array<string> = ['common'];
            // test 按钮权限标识
            const testAuthBtnList: Array<string> = ['btn.add', 'btn.link'];
            // 不同用户模拟不同的用户权限
            if (userName === 'admin') {
                defaultRoles = adminRoles;
                defaultAuthBtnList = adminAuthBtnList;
            } else {
                defaultRoles = testRoles;
                defaultAuthBtnList = testAuthBtnList;
            }
            // 用户信息模拟数据
            const userInfos = {
                id: 0,
                userName: userName ?? "",
                userNickname: "",
                avatar:
                    userName === 'admin'
                        ? 'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=1813762643,1914315241&fm=26&gp=0.jpg'
                        : 'https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=317673774,2961727727&fm=26&gp=0.jpg',
                time: new Date().getTime(),
                roles: defaultRoles,
                authBtnList: defaultAuthBtnList,
            };
            if (Session.get('userInfo')) {
                this.userInfos = Session.get('userInfo');
            } else {
                this.userInfos = userInfos;
            }
        },
        async setPermissions() {
            this.permissions = Session.get('permissions')
        },
    },
});
